home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #1 / Amiga Plus 1995 #1.iso / demoversionen / documentum_demo / serienbrief.drx < prev    next >
Text File  |  1994-12-13  |  5KB  |  185 lines

  1. /* Demo-AREXX-Skript zur Serienbriefverwaltung mit Documentum_2.0*/
  2. /* für Datenbanken nach folgendem Format:
  3.  
  4. Name,Vorname,Straße
  5. Mustermann,Monika,Musterstr. 1
  6. Jung,Kalle,Teststr. 2
  7.  
  8. */
  9.  
  10. /* trace r */
  11. temp = addlib("rexxsupport.library",0,-30,0)
  12. quit='NOQUIT' /* Merkvariable, ob Documentum_2.0 neu gestartet wurde, */
  13.               /* oder ob es schon lief                                */
  14. textname=''
  15.  
  16.  
  17. address command
  18.  
  19. /* richte eigenen Messageport ein, an den Documentum_2.0 seine
  20.    Messages schicken kann 
  21.    am Port 'DOCU2_SCRIPT' erkennt Documentum_2 beim Start, ob es von einem
  22.    ARexx-Programm gestartet wurde und bleibt dann im Hintergrund. Darum muss
  23.    als Erstes dieser Port installiert werden: */
  24.  
  25. myport = OPENPORT("DOCU2_SCRIPT")
  26. if (myport='0000 0000'x) then do
  27.    say 'Kann den messageport nicht öffnen'
  28.    exit 20
  29.    end
  30.  
  31. succ=show(Ports,DOCUMENTUM2)          /* läuft Documentum_2.0?    */
  32. if succ = 0 then do
  33.       'Documentum:Documentum_2'       /* nein? dann starten       */
  34.       quit='QUIT'                     /* wenn neu gestartet, dann */
  35.       'waitforport DOCUMENTUM2'       /* läuft Documentum_2.0 jetzt? */
  36.       if rc ~=0 then do
  37.        say 'Ich kann leider Documentum_2 nicht starten!'
  38.        call closeport 'DOCU2_SCRIPT'
  39.        exit 20
  40.        end
  41.       else arg textname ' ' filename
  42.       end
  43.       else arg filename
  44.  
  45. succ=OPEN(datei,filename,'R')
  46. if succ = 0 then do
  47.   say 'Ich kann leider die Datei nicht öffnen'
  48.   call cleanexit
  49.   exit 20
  50.   end
  51.  
  52.  
  53. address DOCUMENTUM2
  54.  
  55. /* Wenn das Script Documentum_2 gestartet hat, müssen wir noch das Öffnen
  56.    eines Textes und das Ausdrucken desselben auslösen! */
  57. if (COMPARE(quit,'QUIT') = 0) then do
  58.    'OPEN' textname        /* Öffne Window und lade angegebenen Text */
  59.    'PRINT 1 1 -1'               /* Drucke 1 exemplar pro Datensatz,       */
  60.    end
  61.  
  62. /* Im anderen Fall (das Script wurde von Documentum_2 gestartet) schicken
  63.    wir ein 'SET' an Documentum, der besagt, daß das Script korrekt läuft */
  64. else do
  65.    'SET'
  66.    end
  67.  
  68.  
  69. maxnames = getnames()
  70. call getdata
  71. do forever
  72.   do forever
  73.    succ=waitpkt('DOCU2_SCRIPT')
  74.    if (succ) then leave
  75.    end
  76.   do forever
  77.    packet = getpkt('DOCU2_SCRIPT')
  78.    if (packet ~= '0000 0000'x) then leave
  79.    end
  80.  
  81. /* Documentum schickt Message mit Command "GET" und Argument Variablenname*/
  82. /* wir holen jetzt das argument aus der Message und schauen, ob wir eine  */
  83. /* solche Variable haben, wenn ja schicken wir eine Message an Documentum */
  84. /* von folgendem Format: SET Varname Varinhalt                            */
  85. /* Dabei gehen folgende Fehler an Documentum:
  86.    0 alles klar
  87.    3 Variable unbekannt
  88.    5 unbekanntes Kommando
  89.    8 Datei ist zuende  */
  90.  
  91.   temp = getarg(packet,0)
  92.   parse upper var temp befehl ' ' varname
  93.  
  94.   select
  95.  
  96. /* Variablen-Abfrage ? */
  97.     when compare("GET",befehl)=0 then do
  98.       temp = getvari(varname)
  99.       if length(temp)= 0
  100.         then call reply packet,3   /* Fehler an Documentum melden */
  101.       else do
  102.         call reply packet,0        /* Message beantworten, KEIN Fehler */
  103.         'SET' varname temp       /* Message an Documentum schicken   */
  104.       end
  105.     end
  106.  
  107. /* Beenden des Druckvorgangs */
  108.     when compare("ABORT",befehl)=0 then do
  109.       call reply packet,0
  110.       leave
  111.       end
  112.  
  113. /* Einlesen des nächsten Datensatzes */
  114.     when compare("NEXT",befehl)=0 then do
  115.       succ = getdata()
  116.       if succ=0 then do       /* kein Datensatz mehr da -> Ende */
  117.         call reply packet,8
  118.         leave
  119.         end
  120.       call reply packet,0
  121.       end
  122.     otherwise call reply packet,5  /* unbekanntes Kommando */
  123.     end
  124.   end
  125.  
  126. call close datei
  127. call cleanexit
  128.  
  129. exit
  130.  
  131. cleanexit:
  132.  if (COMPARE(quit,'QUIT') = 0) then address DOCUMENTUM2 'QUIT'  /* Documentum beenden */
  133.  call closeport 'DOCU2_SCRIPT'
  134.  return 0
  135.  
  136. /* Hier folgen die Programmsegmente, die die Datensätze behandlen  */
  137.  
  138. getnames:
  139. i=1
  140. varnames.i=""
  141. do until (compare(zeichen,d2c(10)) = 0)
  142.   if EOF(Datei) then return 0
  143.   zeichen = upper(readch(Datei,1))
  144.   if (compare(zeichen,",")=0) then do
  145.     i=i+1
  146.     varnames.i=""
  147.     end
  148.   else do
  149.     if (compare(zeichen,d2c(10)) = 1) then do
  150.       varnames.i = varnames.i||zeichen
  151.       end
  152.     end
  153.   end
  154. return i
  155.  
  156. getdata:
  157. i=1
  158. varinhalt.i=""
  159. do until (compare(zeichen,d2c(10)) = 0)
  160.   if EOF(Datei) then return 0
  161.   zeichen = readch(Datei,1)
  162.   if (compare(zeichen,",")=0) then do
  163.     i=i+1
  164.     varinhalt.i=""
  165.     end
  166.   else do
  167.     if (compare(zeichen,d2c(10)) = 1) then do
  168.       varinhalt.i = varinhalt.i||zeichen
  169.       end
  170.     end
  171.   end
  172. return 1
  173.  
  174. getvari:
  175. do i = 1 to maxnames
  176.   arg suchvar
  177.   if compare(suchvar,varnames.i) = 0 then do
  178.      temp = varinhalt.i
  179.      if length(temp)=0 then temp = ' '
  180.      return temp
  181.      end
  182.    end
  183. return ''
  184.  
  185.